package com.nehc.nettyserver.service;

import io.netty.channel.Channel;

import java.util.List;
import java.util.Map;

/**
 * 客户端会话服务接口
 * 
 * @author nehc
 * @date 2023-04-02
 */
public interface ClientSessionService {

    /**
     * 注册客户端会话
     *
     * @param channel 通道
     * @param clientId 客户端ID
     * @return 是否成功
     */
    boolean registerSession(Channel channel, String clientId);

    /**
     * 移除客户端会话
     *
     * @param channel 通道
     * @return 是否成功
     */
    boolean removeSession(Channel channel);

    /**
     * 移除客户端会话(按客户端ID)
     *
     * @param clientId 客户端ID
     * @return 是否成功
     */
    boolean removeSessionByClientId(String clientId);

    /**
     * 根据客户端ID获取通道
     *
     * @param clientId 客户端ID
     * @return 通道
     */
    Channel getChannel(String clientId);

    /**
     * 根据通道获取客户端ID
     *
     * @param channel 通道
     * @return 客户端ID
     */
    String getClientId(Channel channel);

    /**
     * 获取所有在线客户端ID
     *
     * @return 客户端ID列表
     */
    List<String> getAllClientIds();

    /**
     * 获取在线客户端数量
     *
     * @return 在线数量
     */
    int getOnlineCount();

    /**
     * 更新心跳时间
     *
     * @param channel 通道
     */
    void updateHeartbeat(Channel channel);

    /**
     * 获取客户端会话信息
     *
     * @param clientId 客户端ID
     * @return 会话信息
     */
    Map<String, Object> getSessionInfo(String clientId);

    /**
     * 获取所有客户端会话信息
     *
     * @return 所有会话信息
     */
    List<Map<String, Object>> getAllSessionsInfo();

    /**
     * 检查客户端是否在线
     *
     * @param clientId 客户端ID
     * @return 是否在线
     */
    boolean isOnline(String clientId);

    /**
     * 向指定客户端发送消息
     *
     * @param clientId 客户端ID
     * @param message 消息内容
     * @return 是否成功
     */
    boolean sendMessage(String clientId, String message);

    /**
     * 广播消息
     *
     * @param message 消息内容
     * @return 成功发送的客户端数量
     */
    int broadcastMessage(String message);
} 